package com.binhthuan.catechist.server.bus;

import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

import com.binhthuan.catechist.server.domain.Shift;
import com.binhthuan.catechist.server.util.HibernateUtil;

public class ShiftBUS extends AbstractBUS {

    /**
     * Lấy ca học của 1 lớp.
     * @param courseId Mã lớp.
     * @return
     */
    public Shift getShiftByCourse(int courseId) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction transaction = null;
        Shift result = null;
        try{
            transaction = session.beginTransaction();
            Query query = session.createQuery("select c.shift from Course c where c.id = :id");
            query.setInteger("id", courseId);
            result = (Shift) query.uniqueResult();
            
            transaction.commit();
        } catch (HibernateException he) {
            he.printStackTrace();
            transaction.rollback();
        } finally {
            session.close();
        }
        
        return result;
    }

    /**
     * Lấy ca học theo tên.
     * @param name Tên ca học.
     * @return
     */
    public Shift getShiftByName(String name) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction transaction = null;
        Shift result = null;
        try{
            transaction = session.beginTransaction();
            Query query = session.createQuery("select c from Shift c where c.name = :name");
            query.setString("name", name);
            result = (Shift) query.uniqueResult();
            
            transaction.commit();
        } catch (HibernateException he) {
            he.printStackTrace();
            transaction.rollback();
        } finally {
            session.close();
        }
        
        return result;
    }

    /**
     * Lấy tất cả ca học.
     * @return
     */
    public List<Shift> getAllShifts() {
        return getAll(Shift.class);
    }

    /**
     * Lấy ca học.
     * @param id Mã ca học.
     * @return
     */
    public Shift getShiftById(int id) {
        return (Shift) get(Shift.class, id);
    }

    /**
     * Kiểm tra ca học có đang được sử dụng hay không.
     * @param id Mã ca học.
     * @return
     */
    public boolean isInUsed(int id) {
        return true;
    }

    public boolean deleteShift(int id) {
        return delete(Shift.class, id);
    }
}
